#include <iostream>
#include <memory>
#include <sstream>
#include <string>
#include <jsoncpp/json/json.h>

// int main()
// {
//     const char *name = "张三";
//     int age = 18;
//     float score[] = {77, 88.8, 99.5};

//     Json::Value root;
//     root["姓名"] = name;
//     root["年龄"] = age;
//     root["成绩"].append(score[0]);
//     root["成绩"].append(score[1]);
//     root["成绩"].append(score[2]);

//     //序列化操作
//     Json::StreamWriterBuilder swb;
//     std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
//     std::stringstream ss;
//     sw->write(root, &ss);

//     //输出内容
//     std::cout << ss.str() << std::endl;

//     return 0;
// }

int main()
{
    std::string str = R"({"姓名":"张三", "年龄":20, "成绩":[59, 66.5, 77.5]})"; // 使用R"()"时为了防止字符串内部符号解析
    Json::Value root;

    // 反序列化操作
    Json::CharReaderBuilder crb;
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
    std::string err;

    bool ret = cr->parse(str.c_str(), str.c_str() + str.size(), &root, &err);
    if(ret == false)//解析失败
    {
        std::cout << "parse error : " << err << std::endl;
        exit(-1);
    }
    //解析成功,输出内容
    std::cout << "姓名:" << root["姓名"].asString() << std::endl;
    std::cout << "年龄:" << root["年龄"].asInt() << std::endl;

    int sz = root["成绩"].size();
    std::cout << "成绩:";
    for(int i = 0; i < sz; i++)
    {
        std::cout << root["成绩"][i] << " ";
    }
    std::cout << std::endl;

    return 0;
}